package com.tree.backend.controller;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.tree.backend.common.Result;
import com.tree.backend.entity.dto.EnterpriseDTO;
import com.tree.backend.entity.dto.EnterpriseQueryDTO;
import com.tree.backend.entity.pojo.Enterprise;
import com.tree.backend.entity.pojo.User;
import com.tree.backend.entity.vo.EnterpriseListVO;
import com.tree.backend.entity.vo.EnterpriseStatsVO;
import com.tree.backend.entity.vo.EnterpriseVO;
import com.tree.backend.service.IEnterpriseService;
import com.tree.backend.service.IUserService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

/**
 * <p>
 * 企业表 前端控制器
 * </p>
 *
 * @author tree
 * @since 2025-11-06
 */
@RestController
@RequiredArgsConstructor
@RequestMapping("/enterprise")
public class EnterpriseController {

    private final IEnterpriseService enterpriseService;

    /**
     * 获取企业统计信息
     *
     * @return 企业统计信息
     */
    @GetMapping("/stats")
    public Result<EnterpriseStatsVO> getEnterpriseStats() {
        EnterpriseStatsVO stats = enterpriseService.getEnterpriseStats();
        return Result.success(stats);
    }

    /**
     * 获取企业列表
     *
     * @param queryDTO 查询条件
     * @return 分页企业列表
     */
    @GetMapping("/list")
    public Result<IPage<EnterpriseListVO>> getEnterpriseList(EnterpriseQueryDTO queryDTO) {
        IPage<EnterpriseListVO> page = enterpriseService.getEnterpriseList(queryDTO);
        return Result.success(page);
    }

    /**
     * 获取企业详情
     *
     * @param id 企业ID
     * @return 企业详情
     */
    @GetMapping("/{id}")
    public Result<EnterpriseVO> getEnterpriseDetail(@PathVariable("id") Long id) {
        EnterpriseVO enterprise = enterpriseService.getEnterpriseDetail(id);
        if (enterprise == null) {
            return Result.error(404, "企业不存在");
        }
        return Result.success(enterprise);
    }

    /**
     * 新增企业
     *
     * @param enterpriseDTO 企业信息
     * @return 新增结果
     */
    @PostMapping
    public Result<Enterprise> addEnterprise(@RequestBody EnterpriseDTO enterpriseDTO) {
        Enterprise enterprise = enterpriseService.addEnterprise(enterpriseDTO);
        return Result.success(enterprise);
    }

    /**
     * 更新企业
     *
     * @param id            企业ID
     * @param enterpriseDTO 企业信息
     * @return 更新结果
     */
    @PutMapping("/{id}")
    public Result<Enterprise> updateEnterprise(@PathVariable("id") Long id, @RequestBody EnterpriseDTO enterpriseDTO) {
        Enterprise enterprise = enterpriseService.updateEnterprise(id, enterpriseDTO);
        if (enterprise == null) {
            return Result.error(404, "企业不存在");
        }
        return Result.success(enterprise);
    }

    /**
     * 删除企业
     *
     * @param id 企业ID
     * @return 删除结果
     */
    @DeleteMapping("/{id}")
    public Result<?> deleteEnterprise(@PathVariable("id") Long id) {
        // 检查企业是否存在
        EnterpriseVO enterprise = enterpriseService.getEnterpriseDetail(id);
        if (enterprise == null) {
            return Result.error(404, "企业不存在");
        }

        try {
            enterpriseService.deleteEnterprise(id);
            return Result.success(null);
        } catch (Exception e) {
            return Result.error(500, "删除失败：" + e.getMessage());
        }
    }

    /**
     * 审核企业
     *
     * @param id     企业ID
     * @param status 审核状态 1-通过 2-拒绝
     * @param reason 拒绝原因（可选）
     * @return 审核结果
     */
    @PutMapping("/{id}/audit")
    public Result<?> auditEnterprise(@PathVariable("id") Long id,
                                     @RequestParam("status") Integer status,
                                     @RequestParam(value = "reason", required = false) String reason) {
        // 检查企业是否存在
        EnterpriseVO enterprise = enterpriseService.getEnterpriseDetail(id);
        if (enterprise == null) {
            return Result.error(404, "企业不存在");
        }

        // 检查是否是待审核状态
        if (enterprise.getStatus() != 0) {
            return Result.error(400, "只有待审核的企业才能进行审核操作");
        }

        // 检查审核状态是否有效
        if (status != 1 && status != 2) {
            return Result.error(400, "无效的审核状态，请选择1-通过或2-拒绝");
        }

        // 拒绝时必须提供原因
        if (status == 2 && (reason == null || reason.trim().isEmpty())) {
            return Result.error(400, "拒绝审核时必须提供拒绝原因");
        }

        try {
            enterpriseService.auditEnterprise(id, status, reason);
            return Result.success(null);
        } catch (Exception e) {
            return Result.error(500, "审核失败：" + e.getMessage());
        }
    }
}
